Serieel monitor geeft niets weer

Hallo
Heb nog een vraagje waar ik niet uitkom
werk nog niet zolang met arduino
Als ik mijn code upload werkt de serieel monitor perfect
(ter controle serial.print achter de failsave gezet)deze werkt perfect
Nu heb ik ook een code voor de hc06 bleuthoot
Als ik deze apart upload werk het prima ook de serieel monitor
zet ik de code echter in het programma doet de serieel monitor niets meer ook niet als ik het rc signaal aanzet en hij dus “ok” zou moeten printen
Gehele code

#define PI 3.141

 #include <Servo.h>

//servo
const int servo1 = 32;  // Pin for the first servo
int servoVal;   
Servo myservo1;           // create servo object to control a servo

 int val;

int ready = 0;

 //l298n -------------
// Motor A
 int enA =2;
int in1 = 52;
int in2 = 50;
 // Motor B
 int enB = 3;
int in3 = 51;
int in4 = 53;
//Motor Speed Values - Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
 //rc kanalen---------
double channel[2];
const int pwmPIN[]={4,5,6,7,8,11,12,13}; // an array to identify the PWM input pins (the array can be any length) 
int RC_inputs = 0;
int i;
 int  buttonState =0;
 int lastbuttonState = 0;
 int x = 0;

 
void setup(){

 myservo1.attach(servo1);  // attaches the servo
 for(i=22;i<30;i++)
{
  pinMode(i, OUTPUT);//relay pins
  digitalWrite(i, HIGH);
}

  // Set all the motor control pins to outputs
 
 pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
   
  // Start with motors disabled and direction forward
   // Motor A
    digitalWrite(enA, LOW);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
   // Motor B
   digitalWrite(enB, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  Serial.begin(9600);
  Serial.setTimeout(10);      //ensures the the arduino does not read serial for too long
  ready = 0;

}
void loop() {

channel[0]=pulseIn(7, HIGH,50000);//ch2 ln298 rechter joystick x as
channel[1]=pulseIn(8, HIGH,50000);//ch4 ln298 rechter joystick y as
channel[3]=pulseIn(6, HIGH,50000);//ch8 ln298
channel[4]=pulseIn(4, HIGH,50000);//ch 14 relais1 en relais 2
channel[5]=pulseIn(5, HIGH,50000);



   // failsave voor als het rc signaal wegvalt stopt het script
   //failsave

int sIn = 4;

unsigned long dur;
unsigned long failsafeVal = 1900;
int debounce = 1; //seconds//amount of time to regain rc signal from the time its lost
unsigned long lastDisconnection = 0;
unsigned long previousMillis = 0;
int RCstatus = 0;
int prevStatus = 0;
unsigned long currentMillis = millis();
  
  dur = pulseIn(sIn, HIGH, 500000);

  //falls to acceptable range
  if (dur >= 950 && dur <= 2000)
  {
    //check if it regains signal
    if (prevStatus == 2 && (currentMillis - lastDisconnection) < (debounce * 1000))
    
      dur = failsafeVal;
       Serial.println("ok");
    
 
//y as biede motoren syncroon voor achteruit x as alleen linker of rechter moter met roerservo-----------

  if (channel[3] >1500){
  
  if (channel[0] < 1400)
  {
 // Set Motor A backward
  digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
 
    // Set Motor B backward
 
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
 
    MotorSpeed1 = map(channel[0], 1400, 1020, 0, 255);
    MotorSpeed2 = map(channel[0], 1400,1020, 0,255);
 }
  else if (channel[0] > 1500)
  {
    // This is Forward
 
    // Set Motor A forward
    digitalWrite(in1, HIGH);
   digitalWrite(in2, LOW);

       // Set Motor B forward
 
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
 
    //Determine Motor Speeds
    MotorSpeed1 = map(channel[0],1480, 1930, 0, 255); 
    MotorSpeed2 = map(channel[0],1480, 1930, 0, 255); 

  }
  else
  {
    // This is Stopped
 
    MotorSpeed1 = 0;
    MotorSpeed2 = 0; 
  }
  
  // Now do the steering
  if (channel[1] < 1400)
  {
    
    // Move Left

    i = map(channel[1], 1400, 1020, 0, 255);
        
    MotorSpeed1 = MotorSpeed1 - i;
    MotorSpeed2 = MotorSpeed2 + i;

   if (MotorSpeed1 < 0)MotorSpeed1 = 0;
    if (MotorSpeed2 > 255)MotorSpeed2 = 255;
 
  }
  else if (channel[1] > 1550)
  {
    // Move Right
    
    i= map(channel[1], 1508, 1930, 0, 255);

    MotorSpeed1 = MotorSpeed1 + i;
    MotorSpeed2 = MotorSpeed2 -i;

    // Don't exceed range of 0-255 for motor speeds
  
    if (MotorSpeed1 < 0)MotorSpeed1 = 0;
    if (MotorSpeed2 > 255)MotorSpeed2 = 255;
  }



  }
  //alleen syncroon draaien met roerservo -------yas motoren x as roerservo---------------
   
   if ( channel[3]>1400 && channel[3]<1600){
      if (channel[0] < 1400)
  {
   // Set Motor A backward
  digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
 
    // Set Motor B backward
 
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);

    MotorSpeed1 = map(channel[0], 1400, 1010, 0, 255);
    MotorSpeed2 = map(channel[0], 1400,1010, 0,255);
  
  }
  else if (channel[0] > 1500)
  {
    // This is Forward
 
    // Set Motor A forward
    digitalWrite(in1, HIGH);
   digitalWrite(in2, LOW);

       // Set Motor B forward
 
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
 
    //Determine Motor Speeds
 
    MotorSpeed1 = map(channel[0],1500, 1930, 0, 255);
    MotorSpeed2 = map(channel[0],1500, 1930, 0, 255); 
  }
      else
  {
    // This is Stopped
 
    MotorSpeed1 = 0;
    MotorSpeed2 = 0; 
  }
   }
    if ( channel[3]<1400){
    if  (channel[1]>1500){
    
  
   //Motor A achteruit
  digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
 
    // Set Motor B vooruit
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW); 
    
    MotorSpeed1 = map(channel[1],1500, 1930, 0, 255);
    MotorSpeed2 = map(channel[1],1500, 1930, 0, 255); 
  }
  
    
  else if ( channel[3]<1400){
  if ( channel[1]<1500){

      digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
 
    // Set Motor B backward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH); 
    
   MotorSpeed1 = map(channel[1], 1400, 1020, 0, 255);
    MotorSpeed2 = map(channel[1], 1400,1020, 0,255);
  }
  }else {
    // This is Stopped
 
    MotorSpeed1 = 0;
    MotorSpeed2 = 0; 
  }
  }


  if (MotorSpeed1 < 30)MotorSpeed1 = 0;    // Adjust to prevent "buzzing" at very low speed
  if (MotorSpeed2 < 30)MotorSpeed2 = 0;
 
  analogWrite(enA, MotorSpeed1); // Set the motor speeds
  analogWrite(enB, MotorSpeed2);


// servo roer


// servo roer
if (channel[1]>1490){//sturen bij syncroon draaien

   servoVal= map(channel[1], 1485, 1915,90,0);  // sturen met beide motoren knop middenstand
}else if (channel[1]<1450){
   servoVal= map(channel[1], 1480,1020, 90, 180);  
}else if (channel[1]>1400 && channel[1]<1550){
  servoVal = 90;
}
 myservo1.write(servoVal);   

 delay(5);


 //void myISR() {
//relay module

// rc ontvanger----------------



if(channel[4]>1600 ){
buttonState =digitalRead (22);
  if (buttonState ==HIGH){
  digitalWrite (22, LOW);
 Serial.print (channel[4]);
}  else if(channel[4]>1600 ){
  digitalWrite (22, HIGH);
}
delay(300);
}
if(channel[4]<1200 && channel[4]>800 ){
buttonState =digitalRead (23);
  if (buttonState ==HIGH){
  digitalWrite (23, LOW);
 
}  else if(channel[4]<1200 && channel[4]>800){
  digitalWrite (23, HIGH);
}
delay(300);
}
if (channel[5] >1600){
digitalWrite (24, LOW);
}
else if(channel[5]<1200)
{
  digitalWrite(25,LOW);
}
else 
{
digitalWrite (24, HIGH);
digitalWrite (25,HIGH);
}


  }else if (Serial.available()){   //else van de failsave
    ready = 1;
    val = Serial.parseInt();

  Serial.println(val);
    if(Serial.read() == '\n'){              

        Serial.flush();                
              //send completion of the command
        Serial.print('d');     
       
       
  }
    }
}

Code voor bleuthoot

#define PI 3.141
int i;
int ready = 0;

int val;

void setup()
{ 
  Serial.begin(9600);
  Serial.setTimeout(10);      //ensures the the arduino does not read serial for too long
  ready = 0;
} 

//primary arduino loop
void loop() 
{ 
  if (Serial.available()){
    ready = 1;
    val = Serial.parseInt();

  Serial.println(val);
    if(Serial.read() == '\n'){               // if the last byte is 'd' then stop reading and execute command 'd' stands for 'done'

        Serial.flush();                     //clear all other commands piled in the buffer
          //send completion of the command
        Serial.print('d');     
      
    }
  }

Wat doe ik fout

Wie kan hiermee helpen??

je kunt maar 1 programma tegelijk laten werken dus je zult beide codes in elkaar moeten zetten dus 1 setup en 1 loop.

shooter:
je kunt maar 1 programma tegelijk laten werken dus je zult beide codes in elkaar moeten zetten dus 1 setup en 1 loop.

Heb maar 1 setup en 1 loop
In de eerste code
De tweede code is allen voor de bluethooth die zit al verwerkt in de eerste code
Heb ontdekt dat het iets te doen heeft met de parseint code

Hoi ienvanveen

Maar wat is dan je complete code met alles erop en eraan (en die dus geen respons op Serial Monitor geeft). Ik zie namelijk in de eerste snippet: Serial.begin(9600); en in de tweede snippet precies hetzelfde.

In je eerste code zie ik nergens dat je een tweede seriele poort gebruikt voor de bluetooth. Dat houdt vermoedelijk in dat je bluetooth is verbonden op pinnen 0 and 1 hetgeen in het algemeen niet werkt.

Het lijkt erop dat je een Mega gebruikt, dus ik stel voor dat je de bluetooth verplaatst naar Serial1/2/3 en je code daarvoor aanpast; gebruik Serial voor de communicatie met de PC en bv Serial1 voor communicatie met de bluetooth.

Sorry ben er een tijd tussen uit geweest maar ga nu weer verder.
Heb de code inmiddels beetje veranderd en alles werkt tot nu toe prima.
Echter als ik een kanaal van mijn receiver wil toevoegen werkt deze niet en stopt de serieel monitor er ook mee heb een H bridge met 2motoren een servo en een 8kanaals relais module deze werken allemaal zowel met RC als via de telefoon met Bluetooth
Daar ik een carson 14kanaals zender /ontvanger heb en nu maar 5kanalen heb aangesloten gaat alles goed declareer. Ik echter channel[6]=pinIn(11,HIGH,50000);
Werkt deze nietook de serieel monitor geeft niets meer aan voor de rest blijft alles wel werken
Wat doe ik verkeerd wie weet raad??


​[tt]​[/tt]

Fairmont_alpine.ino (12.8 KB)

Uit je programma:

double channel[2];

Met die opzet kun je maar twee kanalen specificieren. En gaat het onderstaande gigantisch de mist in; je hebt geluk gehad dat het allemaal een beetje leek te werken.

channel[0]=pulseIn(7, HIGH,50000);//ch2 ln298 rechter joystick x as
channel[1]=pulseIn(8, HIGH,50000);//ch4 ln298 rechter joystick y as
channel[3]=pulseIn(6, HIGH,50000);//ch8 ln298
channel[4]=pulseIn(4, HIGH,50000);//ch 14 relais1 en relais 2
channel[5]=pulseIn(5, HIGH,50000);//ch 13 2xrelais
channel[6]=pulseIn(10, HIGH,50000);//ch 13 2xrelais

Je hebt zeven kanalen (genummerd nul tot zes) dus zul je de declaratie van channel moeten aanpassen

[code]double channel[7];

Er zitten nog wat meer problemen in je programma; de grootste is waarschijnlijk deze

      char input = receivedChars;

Je kunt geen array naar een char copieren.

Hieronder de volledige lijst die ik krijg. Om deze lijst te krijgen moet je in file → preferences de ‘warning level’ op ALL zetten.

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:61:7: warning: unused variable 'motorA' [-Wunused-variable]

   int motorA = 0;

       ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:62:7: warning: unused variable 'motorB' [-Wunused-variable]

   int motorB = 0;

       ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino: In function 'void loop()':

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:108:64: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

     if (prevStatus == 2 && (currentMillis - lastDisconnection) < (debounce * 1000))

                                                                ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:97:17: warning: unused variable 'previousMillis' [-Wunused-variable]

   unsigned long previousMillis = 0;

                 ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:98:7: warning: unused variable 'RCstatus' [-Wunused-variable]

   int RCstatus = 0;

       ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino: In function 'void bluethooth()':

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:407:20: warning: invalid conversion from 'char*' to 'char' [-fpermissive]

       char input = receivedChars;

                    ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:579:26: warning: suggest parentheses around '&&' within '||' [-Wparentheses]

         if ( motorB == 1 && motorA == 1 || motorB == 2 && motorA == 2 || motorA == 1 && motorB == 2 || motorA == 2 && motorB == 1) {

                          ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:579:86: warning: suggest parentheses around '&&' within '||' [-Wparentheses]

         if ( motorB == 1 && motorA == 1 || motorB == 2 && motorA == 2 || motorA == 1 && motorB == 2 || motorA == 2 && motorB == 1) {

                                                                                      ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:579:116: warning: suggest parentheses around '&&' within '||' [-Wparentheses]

         if ( motorB == 1 && motorA == 1 || motorB == 2 && motorA == 2 || motorA == 1 && motorB == 2 || motorA == 2 && motorB == 1) {

                                                                                                                    ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:407:12: warning: unused variable 'input' [-Wunused-variable]

       char input = receivedChars;

            ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:405:9: warning: unused variable 'angle' [-Wunused-variable]

     int angle = 0;

         ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:360:8: warning: unused variable 'startmarker' [-Wunused-variable]

   char startmarker;

        ^

Archiving built core (caching) in: C:\Users\sterretje\AppData\Local\Temp\arduino_cache_679044\core\core_arduino_avr_mega_cpu_atmega2560_0c812875ac70eb4a9b385d8fb077f54c.a
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp: In function 'main':

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:540:7: warning: 'motorB' may be used uninitialized in this function [-Wmaybe-uninitialized]

       if (motorB == 1 && Blt == 408) {

       ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:383:9: note: 'motorB' was declared here

     int motorB ;

         ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:517:7: warning: 'motorA' may be used uninitialized in this function [-Wmaybe-uninitialized]

       if (motorA == 1 &&  Blt == 406) {

       ^

C:\Users\sterretje\AppData\Local\Temp\arduino_modified_sketch_284614\sketch_may07a.ino:382:9: note: 'motorA' was declared here

     int motorA;

         ^

Oke zoals je ziet ben ik nog maar een beginner met de arduino
Als ik het dus goed begrijp zijn dat dus allemaal fouten wist niet dat je dat kon zien
Ga er morgen verder mee laat dan wel weten of het lukt en zoals je zegt idd een wonder dat alles werkte
Wat bedoelen ze met unused variable ??

Dat is een variabele die verder nergens word gebruikt. Vaak (soms ook niet) een aanwijzing dat je ergens een foutje hebt gemaakt. In jouw geval lijkt er geen foutje te zijn voor motorA (de enige die ik even vluchtig gecontroleerd heb).

NB
Het zijn waarschuwingen, geen fouten. Maar sommige waarschuwing duiden duidelijk op een probleem (zoals degene die ik in het begin van antwoord #7 heb getoond).

Oke alvast bedankt zal ernaar kijken

Nog even dit voor als het leuk vind
Ben dus bezig met een modelboot te bouwen die ik met de arduino wil besturen hier een filmpje hoe de script werkt

Probleemje van serieel monitor is idd opgelost alvast bedankt
Naderhand wel dom van mezelf dat ik daar niet opkwam
Weet echter nog niet wat ik met de char input aan moet

Weet echter nog niet wat ik met de char input aan moet

Vraag is waarom die regel in je programma staat? De input variabele wordt verder nergens gebruikt.

Verder zie ik dat je Robin's voorbeeld code danig verbasterd hebt :wink: Uiteraard be je vrij om dat te doen maar je bleutooth() functie zou eigenlijk alleen de inkomende karakters moeten opslaan en niet bv ook motors of de verlichting moeten besturen.

Verder zou je eigenlijk altijd bluetooth() moeten aanroepen vanuit loop(); niet onder zekere condities.

// Edit:
Je kunt je aangepaste code hier posten en dan kan iemand je helpen om de waarschuwingen weg te werken.

Verder zou je eigenlijk altijd bluetooth () moeten aanroepen vanuit loop (); niet onder zekere voorwaarden

Heb de Bluethooth in aparte loop gezet omdat ik het één of het andere gebruik rc of bluetooth eigenlijk met de gedachte dat het programma niet alles hoeft te doorlopen als je het niet gebruikt
Mijn bedoeling was alles met beide besturingen te kunnen bedienen
Wat is dan het nadeel om in een aparte loop te werken?

Dit is de app die ik gemaakt heb voor de besturing

Functies moeten klein zijn om volgbaar te blijven, kantje A4 maximaal. Als je Robin’s code wat verder had gevolgd en een aparte functie had geschreven om de bleutooth data af te handelen nadat deze ontvangen is (bv gebruik van showNewData() maar met een betere naam), was in ieder geval de originele functie klein gebleven. Het afhandelen van al je cases is een ander verhaal dat ook wel op te lossen is, maar misschien niet eenvoudig voor een beginner.

Laten we beginnen om je waarschuwingen zo veel mogelijk kwijt te raken. Begin met de ongebruikte variabelen; je kunt een goede reden hebben om ze hebben, maar voor iemand die dat niet weet en probeert je te helpen is het zeer verwarrend.

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

    if (prevStatus == 2 && (currentMillis - lastDisconnection) < (debounce * 1000))

currentMillis en lastDisconnection zijn unsigned, debounce en 1000 zijn signed; de compiler waarschuwt je dat er problemen kunnen optreden. Maak een van de laatste twee unsigned en dat probleem is opgelost; hieronder de laatste.

    if (prevStatus == 2 && (currentMillis - lastDisconnection) < (debounce * 1000UL))

Dit stukje van je programma heeft nog een ander problem; prevStatus kan nooit 2 zijn omdat je vlak ervoor het volgende hebt

  int prevStatus = 0;

Onderstaande regel doet in de praktijk niets.

      dur = failsafeVal;

Je geeft dur een waarde en als je loop() verlaat wordt die waarde vergeten.

warning: ‘motorA’ may be used uninitialized in this function [-Wmaybe-uninitialized]

    int motorA;
    int motorB;
...
...
      if (motorA == 1 &&  Blt == 406)

De waarschuwing slaat op de laatste regel en wordt veroorzaakt door de eerste regel. Na de eerste regel kan motorA elke waarde bevatten; dat kan 0 ziijn, dat kan 10 of 999 zijn enz. Stel je voor dat het 1 is en in al je cases deze niet wordt veranderd, dan is het eerste gedeelte van de conditie al waar. Als je het eerste stukje verandert naar bv

    int motorA = -1;
    int motorB = -1;

is dat probleem opgelost.

Nu zit er waarschijnlijk een denkfout in je code. Als je app 105 stuurt (Blt gelijk aan 105) kan Blt nooit gelijk aan 406 zijn.

warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]

        if ( motorB == 1 && motorA == 1 || motorB == 2 && motorA == 2 || motorA == 1 && motorB == 2 || motorA == 2 && motorB == 1)

Ik zou, om voor mezelf zekere te maken dat het de goede vergelijkingen doet, de suggestie opvolgen en extra () gebruiken; waarschijnlijk is onderstaande wat je wilt.

if ( (motorB == 1 && motorA == 1) || (motorB == 2 && motorA == 2) || (motorA == 1 && motorB == 2) || (motorA == 2 && motorB == 1))

Oke begrijp ongeveer wat je bedoeld, wel een wonder dat het allemaal werkt, zal er volgende week nog eens goed naar kijken en de fouten eruit proberen te halen
En dan te bedenken dat dit nog maar het begin is want er moet nog meer geprogrammeerd worden om de lieren en kranen te besturen
Alvast bedankt zover

Voordat je verder gaat, zou ik eens kijken of de boel niet wat ge-optimaliseerd kan worden. Lange lappen programma zijn zeer moeilijk te onderhouden. En met jouw benadering moet je alles dubbel doen :wink:

Ik heb daar gisteren even naar gekeken en kwam er niet een-twee-drie uit. Het idee zou moeten zijn dat beide 'ontvangers' (RC en bleutooth) lezen een de waarden voor bv. voor de motor snelheid opslaan in dezelfde variabele. Na al het lezen kun je dan een functie aanroepen die de motoren op de juiste snelheid zet gebaseerd op die variabele. hetzelfde voor de roer posities enz. enz.

Ik ben niet bekend met de RC; kun je uitleggen hoe dat een beetje werkt met kanalen? Ik zie dat je bv een kanaal checkt en als dat een bepaalde waarde heeft een ander kanaal checkt binnen een if.

RC is hetzelfde als een servo; daar komen de servo signalen vandaan.
Lezen betekent dan dat je een servo "kanaal"moet decoderen, vandaar de vele pulseIn die je kunt zien.
Een kanaal is 1 as van een joystick, zeker op de manier waarop het in deze sketch word afgehandeld.
De joystick veert normaal ook terug in de middenstand, en voorheen werd er ook wel eens vanuit die middenstand naar een richting als 1 kanaal geteld, maar zo word het niet uitgezonden en verwerkt (dus ook niet in deze sketch).
Dus de ontvanger van dat RC signaal heeft een x aantal servo uitgangen.
Ik heb de betreffende ontvanger even opgezocht, en die 14 kanalen is onwaarschijnlijk.
De eerste 4 kanalen zijn de joysticks, en das al zeker een halve eeuw zoals boven beschreven.
Maar de andere 10 kanalen zijn schakelaars (verschillende soorten).
Wanneer daar zo'n pulsduur signaal gebruikt zou worden die je met pulseIn moet uitlezen, dan is dat nogal onlogisch.
Daarom kan rienvanveen eens opzoeken of ie daar niet naar een pulse moet kijken, maar gewoon naar een 1 of een nul want dat lijkt mij veel logischer.
Maar daar kan ik niets over vinden in gebruiksaanwijzing, dus dan word het testen / debuggen.
Aangezien je kanaal 5 al in gebruik had en dat zou werken, kun je met die sketch de waarde van dat 5e kanaal via serial naar buiten sturen om te zien wat dat signaal eigenlijk doet.
Eventueel een servo op dat 5e kanaal aansluiten en zien wat dat ding doet.
Als die gaat bewegen wanneer er een schakelaar bediend word, dan staat daar dus zo'n puls op.
Anders gaat ie niet bewegen, en dan is het waarschijnlijker dat er een 1 of een 0 aan die uitgang komt.

Er word een poging gedaan om niet blokkerende code te gebruiken, maar dat gaat jammerlijk verloren.
Niet alleen omdat de rest van de code blokkerende delen bevat en de variabelen op de verkeerde plaats gedefinieerd worden, maar pulseIn is ook blokkerend.
Het uitlezen van de RC signalen in de eerst getoonde sketch kan tot 25 seconden duren (wanneer er geen signaal binnenkomt), en als er kanalen zijn toegevoegd word dat dus telkens 5 seconden per kanaal meer.