От известно време се боря с този проблем и той ме побърква:
Опитвам се да комуникирам много просто с Arduino Mega 2560 (чрез USB като серийно устройство) от компютър, работещ с Linux (Knoppix на usb-dok), когато всичко, което се опитвам да постигна на този етап, е, че за всеки номер, изпратен от лаптоп към Arduino, сигналът „stobe“ ще превключи от High на Low или обратното и аз използвам този светлинен светлинен сигнал, за да включа и изключа светодиод.
C код от страна на компютъра:
#include <stdio.h>
int main ()
{
FILE * Device = NULL;
int counter = 0;
Device = fopen("/dev/ttyACM0", "w+");
if(Device == NULL)
{
printf("could not open Device\n");
return -1;
}
while (counter < 10)
{
fprintf(Device, "%d\n", counter);
printf("Sent to Device: %d\n", counter);
counter++;
sleep(2);
}
fclose(Device);
return 0;
}
Код на Arduino:
int cnt = 0;
int strobe = 0;
int num;
int ValidInput = 0;
char intBuffer[12];
String intData = "";
int delimiter = (int) '\n';
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(3, OUTPUT);
}
int input;
void loop()
{
while(num = Serial.available())
{
delay(5);
// Serial.println(num);
int ch = Serial.read();
if(ch == delimiter)
{
ValidInput = 1;
break;
}
else
{
intData += (char) ch;
}
}
int intLen = intData.length() + 1;
intData.toCharArray(intBuffer, intLen);
intData = "";
int i = atoi(intBuffer);
if(ValidInput)
{
if(i == 0)
{
strobe = 0;
Serial.print("Initializing strobe");
}
else
{
strobe = !strobe;
}
digitalWrite(3, (strobe) ? HIGH : LOW);
Serial.println(i);
ValidInput = 0;
}
}
Проблемите, които имам:
- Не сте сигурни дали fopen е правилният начин за комуникация със серийно устройство в Linux и ако да в кой режим?
- Това е основният проблем - изпитвам недетерминирано поведение: ако стартирам този код точно преди да отворя „сериен монитор“ на редактора на Arduino, той не работи, както обясних по-горе, вместо това - ще включи и след това изключи светодиода веднага, за всеки входящ нов номер. но след като отворя „сериен монитор“, той ще действа както искам - променя състоянието на светодиода за всеки нов входящ номер.
Мисля, че това има нещо общо с нулирането на Arduino или нещо от този род.
Прегледах много теми тук и други форуми и не можах да намеря никакво решение на този проблем.
Наистина ще се радвам на вашето прозрение.